<?php
/**
* Fonctionnalités de connexion utilisateur

* [Mathieu FOURNIAL - Romain MIOR]
*/


/* -- Fait par [Mathieu FOURNIAL - Romain MIOR]
 * --- Deconnexion ---
 * Efface les données de la session pour la connexion utilisateur
 */
function deconnexion()
{
    if(isset($_SESSION['est_connecte']))
    {
        if(!empty($_SESSION['est_connecte']))
        {
            $_SESSION['est_connecte'] = false;
            $_SESSION['numclient_connecte'] = null;
        }
    }
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Recupère le numéro ID client ---
 * Renvoi le numéro du client connecté depuis sa session
 */
function getNumClientConnecte()
{
    $num = null;
    if(isset($_SESSION['numclient_connecte']))
    {
        $num = $_SESSION['numclient_connecte'];
    }
    return $num;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Utilisateur connecté ---
 * Renvoi un booléen si l'utilisateur est actuellement connecté
 */
function session_utilisateur_connecte()
{
    $result = false;

    if(isset($_SESSION['est_connecte']))
    {
        if(!empty($_SESSION['est_connecte']))
        {
            if($_SESSION['est_connecte'] == true)
            {
                $result =  true;
            }
        }
    }

    return $result;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Utilisateur valide ---
 * Renvoi un booléen
 * --> VRAI : si le login et le password sont valide
 * --> FAUX : sinon
 * Créer ou met à jour le Cookie utilisateur avec le login
 */
function utilisateur_valide($login, $password)
{
    $result = false;

    // Si une session login et password existe
    if(isset($login) and isset($password))
    {
        // Si cette session n'est pas vide
        if(!empty($login) and !empty($password))
        {
            // Recupere les login et password de connexion des clients
            $mdb2 = connexion();
            
            if(MDB2::isError($mdb2))
            {
                $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
                $message_erreur .= $mdb2->getDebugInfo() ."<br />";
                $message_erreur .= $mdb2->getMessage() ."<br />";

                // Erreur
                $GLOBALS['smarty']->assign('erreur', utf8_encode($message_erreur));
            }
            else
            {
                $sql = 'SELECT NUMCLIENT, LOGIN, PASSWD FROM CLIENT';
                $res = $mdb2->query($sql);

                if(MDB2::isError($res))
                {
                    $message_erreur = "Erreur lors de la selection des clients à la connexion ! <br />";
                    $message_erreur .= $res->getDebugInfo() ."<br />";
                    $message_erreur .= $res->getMessage() ."<br />";

                    // Erreur
                    $GLOBALS['smarty']->assign('erreur', utf8_encode($message_erreur));
                }
                else
                {
                    // Tant qu'aucun utilisateur n'a été trouvé
                    while(!$result and ($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)))
                    {
                            $num_client = $row['numclient'];
                            $client_login = $row['login'];
                            $client_password = $row['passwd'];

                            if($login == $client_login and $password == $client_password)
                            {
                                    $result = true;
                                    $_SESSION['numclient_connecte'] = $num_client;
                                    $_SESSION['est_connecte'] = true;
                                    setcookie('utilisateur', $client_login, (time() + (60*60*24)));
                            }
                    }

                    // Libere SQL
                    $res->free();
                }

                // Disconnect
                $mdb2->disconnect();
            }
        }
    }

    return $result;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Utilisateur connecté ---
 * Renvoi un booléen
 * --> VRAI : si l'utilisateur est connecté
 * --> FAUX : sinon
 */
function utilisateur_est_connecte()
{
    // Test la session de l'utilisateur
    $result = session_utilisateur_connecte();

    // Si aucune session n'est déjà présente
    if(!$result)
    {
        // Si une session login et password existe
        if(isset($_SESSION['login']) and isset($_SESSION['password']))
        {
            // Si cette session n'est pas vide
            if(!empty($_SESSION['login']) and !empty($_SESSION['password']))
            {
                $login = $_SESSION['login'];
                $password = $_SESSION['password'];

                // Test la validité du login et password
                $result = utilisateur_valide($login, $password);
            }
        }
    }

    // Retourne la valeur
    return $result;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Récupère le login du Cookie ---
 * Renvoi le login utilisateur si le cookie existe
 * Sinon renvoi une chaine vide
 */
function get_login_cookie()
{
    $utilisateur = '';
    if(isset($_COOKIE['utilisateur']))
    {
        $utilisateur = $_COOKIE['utilisateur'];
    }
    return $utilisateur;
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Connexion de l'utilisateur ---
 * Fonction appelé pour connecté l'utilisateur
 * => Si le login et password sont correct l'utilisateur est connecté
 * => Sinon une erreur smarty est affiché sur la page
 */
function connexion_utilisateur($login, $password)
{
    // Encode les caratères
    $login = htmlentities ($login, ENT_QUOTES, 'UTF-8');
    $password = htmlentities ($password, ENT_QUOTES, 'UTF-8');
    // Tente une connexion
    if(utilisateur_valide($login, $password))
    {
        // Utilisateur valide (enregistre le login)
        $GLOBALS['smarty']->assign('LOGIN', $login);
    }
    else
    {
        // Utilisateur non valide (affiche erreur)
        $message_erreur = "Votre identifiant ou votre mot de passe ne correspond pas !";
        
        // Erreur
        $GLOBALS['smarty']->assign('erreur', $message_erreur);
    }
}

/* -- Fait par [Mathieu FOURNIAL]
 * --- Récupere les informations de l'utilisateur ---
 * Renvoi un tableau contenant l'ensemble des données de l'utilisateur
 * Utilisateur connecté => Rempli le tableau
 * Utilisateur inexistant => Tableau vide
 */
function get_infos_client()
{
    $login = get_login_cookie();
    
    // Initialise la liste
    $client = Array();
    $mdb2 = connexion();
    
    $message_erreur = '';
    
    if(MDB2::isError($mdb2))
    {
        $message_erreur = "Erreur lors de la connexion à la base de données ! <br />";
        $message_erreur .= $mdb2->getDebugInfo() ."<br />";
        $message_erreur .= $mdb2->getMessage() ."<br />";
    }
    else
    {
        $condition = "LOGIN = '$login'";
        $sql = getRequeteCritere("client", $condition);
        $res = $mdb2->query($sql);
        
        if(MDB2::isError($res))
        {
            $message_erreur = "Erreur lors sélection dans la base CLIENT ! <br />";
            $message_erreur .= $res->getDebugInfo() ."<br />";
            $message_erreur .= $res->getMessage() ."<br />";
        }
        else
        {
            // Si le nombre de ligne > 0
            if($res->numRows() > 0)
            {
                while (($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)))
                {
                    // Affiche le produit sélectionné
                    $client = array('NUMCLIENT' => $row['numclient'],
                        'NOM' => utf8_encode($row['nom']),
                        'PRENOM' => utf8_encode($row['prenom']),
                        'LOGIN' => utf8_encode($row['login']),
                        'PASSWD' => preg_replace('/./', '*', $row['passwd']),
                        'ADRESSE' => utf8_encode($row['adresse']),
                        'TELEPHONE' => utf8_encode($row['telephone']),
                        'EMAIL' => utf8_encode($row['email']),
                        'PROFESSION' => $row['profession'],
                        'SEXE' => $row['sexe'],
                        'CODEPOSTAL' => utf8_encode($row['codepostal']),
                        'PAYS' => utf8_encode($row['pays']),
                        'VILLE' => utf8_encode($row['ville'])
                    );
                }
            }
            else
            {
                // Obtient le message d'erreur
                $message_erreur = getErreurMsg("client");
            }
        }
        
        // Disconnect
        $mdb2->disconnect();
    }
    
    // Erreur
    $GLOBALS['smarty']->append('erreur', utf8_encode($message_erreur));
    
    return $client;
}

?>